/**
 * 时间处理类
 *
 * D().getCurrent())                  // 2022-12-31 21:10:16
 * D().getTimestamp())                // 1672492164
 * D().getDate())                     // 2022-12-31
 * D().format('yyyy.MM.dd'))          // 2022-12-31
 * D().getDatetime())                 // 2022-12-31 21:08:53
 * D().format('yyyy-MM-dd HH:mm:ss')) // 2022-12-31 21:08:53
 *
 */
class Dayjs {
  constructor(time) {
    this.target = time ? new Date(time) : new Date()

    this.debris = {
      'y': this.target.getFullYear(),   //Year
      'M': this.target.getMonth() + 1,  //month
      'd': this.target.getDate(),       //day
      'H': this.target.getHours(),      //hours
      'm': this.target.getMinutes(),    //minutes
      's': this.target.getSeconds()     //seconds
    }
  }

  getCurrent() {
    return this.format()
  }

  getTimestamp() {
    return Math.floor(this.target / 1000)
  }

  getDate() {
    return this.format('yyyy.MM.dd')
  }

  getDatetime() {
    return this.format()
  }

  format(format = 'yyyy-MM-dd HH:mm:ss') {
    const reg = new RegExp('y+|M+|d+|H+|m+|s+', 'g');
    return format.replace(reg, val => {
      const char = val.substring(0, 1)
      if (/y/.test(val) && val.length !== 4) {
        this.debris[char] = this.debris[char].toString().substring(4 - val.length)
      }
      return this.zero(this.debris[char])
    })
  }

  /** 补零 */
  zero(number) {
    return number < 10 ? '0' + number : number;
  }
}

function D(time) {
  return new Dayjs(time)
}

export default D
